Terraform State
環境と1:1に対応するファイル。いろんな状態を覚えている。
これが必要な理由;
宣言されたリソースを実体としてのリソースにマッピングするため
明示的に宣言されないメタデータを記録するため(リソースの順番など)
動作パフォーマンスを向上させるため(リソースの属性値のキャッシュを持つ。全部問い合わせると無限の時間がかかる)
制約
terraformで管理されるリソースは、tfstateと1:1で対応する必要がある。
1つのリソースを2つのtfstateが参照してると何か壊れるかもしれない。
置き場所
一人だけならあまり気にしなくていい
チーム開発など、共有する必要がある場合が問題
履歴付き共有ストレージに置くのがベストプラクティス
なぜgit commitしてはいけないの? → 競合した時の解決が不可能だから
とはいえ、現在の状態を逆反映する操作をすれば解決可能では・・・?
共有ストレージもterraformで作ったらいいね?→そのtfstateの置き場に困る無限後退問題が発生する
S3に置くことが多いっぽい